/**
 * 转换文件大小单位
 * @param {String | Number} fileSize 文件大小，单位为kb
 * @returns 转换后的文件大小，单位为KB/MB/GB
 */
export function transformFileSize(fileSize) {
  if (!fileSize) throw new Error('必须传入一个文件大小值，且单位为kb');
  if (typeof fileSize === 'string') fileSize = parseFloat(fileSize);

  let kb = 1, mb = 1024 * kb, gb = 1024 * mb;
  let size = '';

  if (fileSize > kb && fileSize < mb) {
    size = `${fileSize} KB`;
  } else if (fileSize > mb && fileSize < gb) {
    size = `${(parseFloat(fileSize / mb)).toFixed(2)} MB`;
  } else if (fileSize > gb) {
    size = `${(parseFloat(fileSize / gb)).toFixed(2)} GB`;
  }

  return size;
}

/**
 * 时间戳转换为时间
 * @param {String | Number} timestamp 时间戳
 * @returns 转换后的时间
 */
export function transformDate(timestamp) {
  if (!timestamp) throw new Error('必须传入一个时间戳');
  if (typeof timestamp === 'string') timestamp = parseInt(timestamp);
  if (timestamp.toString().length === 10) timestamp = timestamp * 1000;

  let date = new Date(timestamp);
  let y = date.getFullYear();
  let m = date.getMonth() + 1;
  let d = date.getDate();
  let hh = date.getHours();
  let mm = date.getMinutes();

  return `${y}-${add0(m)}-${add0(d)} ${add0(hh)}:${add0(mm)}`;
}

/**
 * 为<10的数字添加0
 * @param {Number} num 需要处理的数值
 * @returns 处理后的字符串
 */
function add0(num) {
  return num > 9 ? num : `0${num}`;
}

/**
 * 将数组中的元素按照某个参数进行排序
 * @param {Array[String | Object]} arr 需要进行排序的数组
 * @param {String} symbol 非必填，当arr中的元素为对象时，需要传入对应的参数key的名称
 * @returns 排序后的数组
 */
export function arrSorter(arr, symbol) {
  if (!(arr instanceof Array)) throw new Error('传入的数据必须为数组类型');
  return arr.sort(function (str1, str2) {
    if (symbol === undefined) { // 当传入的为基本类型数组
      return !isNaN(arr[0])
        ? parseInt(str1) - parseInt(str2)
        : str1.localeCompare(str2, 'zh');
    } else if (symbol !== undefined) { // 当传入的为对象类型数组
      return  !isNaN(str1[symbol])
        ? parseInt(str1[symbol]) - parseInt(str2[symbol])
        : str1[symbol].localeCompare(str2[symbol], 'zh');
    }
  })
}